using System;
using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using UnityEngine;

namespace HerenityCode.Reference
{
    namespace Format
    {
        /// <summary>
        /// Description:修改字符串格式相关
        /// Author:哒先生
        /// Date:2024年10月10日10:37:24
        /// </summary>
        public class StringFormat : MonoBehaviour
        {
            /// <summary>
            /// 将float类型的时间转化为00:00:00.000格式
            /// </summary>
            /// <param name="time"></param>
            /// <returns></returns>
            public static string FormatTime(float time)
            {
                TimeFormat timeFormat = new TimeFormat();
                timeFormat.ClipHour = (int)time / 3600;
                timeFormat.ClipMinute = (int)(time - timeFormat.ClipHour * 3600) / 60;
                timeFormat.ClipSecond = (int)(time - timeFormat.ClipHour * 3600 - timeFormat.ClipMinute * 60); //秒
                timeFormat.ClipMillisecond =
                    (int)((time - timeFormat.ClipHour * 3600 - timeFormat.ClipMinute * 60 - timeFormat.ClipSecond) * 1000); //毫秒
                return string.Format("{0:D2}:{1:D2}:{2:D2}.{3:D3}",
                    timeFormat.ClipHour, timeFormat.ClipMinute, timeFormat.ClipSecond, timeFormat.ClipMillisecond);
            }
            
            /// <summary>
            /// 获取由特定分隔符分割出来的指定位置的元素
            /// 例如“a:b:c:d”,指定分隔符为“:”，指定位置为1，则返回“b”
            /// </summary>
            /// <param name="input">传入字符串</param>
            /// <param name="separator">分隔符</param>
            /// <param name="catchIndex">获取元素的序号</param>
            /// <returns></returns>
            public static string GetsElementAtSpecifiedLocation(string input,string separator, int catchIndex)
            {
                string[] parts = input.Split(new string[] { " ", separator }, StringSplitOptions.RemoveEmptyEntries);

                if (parts.Length >= catchIndex + 1)
                {
                    return parts[catchIndex];
                }
                else
                {
                    return "Invalid format";
                }
            }

            /// <summary>
            /// 对传入的文本进行去空行操作
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            public static string RemoveSpace(string str)
            {
                return  Regex.Replace(str, @"^\s*$\n|\r", string.Empty, RegexOptions.Multiline);
            }
            
            /// <summary>
            /// 将格式为X数字Y数字的两个数字以Vector2格式返回
            /// </summary>
            /// <param name="input"></param>
            /// <returns></returns>
            public static Vector2 ParseVector2(string input)
            {
                // 初始化结果向量
                Vector2 result = Vector2.zero;

                // 检查输入字符串是否为空
                if (string.IsNullOrEmpty(input))
                {
                    Debug.LogError("输入字符串为空");
                    return result;
                }

                // 查找 'X' 和 'Y' 的索引位置
                int xIndex = input.IndexOf('X');
                int yIndex = input.IndexOf('Y');

                // 检查 'X' 和 'Y' 是否存在
                if (xIndex == -1 || yIndex == -1)
                {
                    Debug.LogError("输入字符串格式不正确，未找到 'X' 或 'Y'");
                    return result;
                }

                // 提取 'X' 和 'Y' 后面的数字
                string xSubstring = input.Substring(xIndex + 1, yIndex - xIndex - 1);
                string ySubstring = input.Substring(yIndex + 1);

                // 将字符串转换为数字并赋值给向量
                if (int.TryParse(xSubstring, out int xValue))
                {
                    result.x = xValue;
                }
                else
                {
                    Debug.LogError("无法解析 X 坐标");
                }

                if (int.TryParse(ySubstring, out int yValue))
                {
                    result.y = yValue;
                }
                else
                {
                    Debug.LogError("无法解析 Y 坐标");
                }

                return result;
            }

        }
        
        public class TimeFormat
        {
            public int ClipHour;
            public int ClipMinute;
            public int ClipSecond;
            public int ClipMillisecond;
        }
    }
}
